package com.wmx.active_mq_1;

import org.apache.activemq.broker.BrokerService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 嵌入式 ActiveMQ 启动
 */
public class EmbedActiveMQStart {

    private static Logger logger = LoggerFactory.getLogger(EmbedActiveMQStart.class);

    /**
     * 嵌入式 ActiveMQ 启动方式1
     * java.lang.NoClassDefFoundError: com/fasterxml/jackson/databind/ObjectMapper
     */
    public static void main(String[] args) {
        try {
            /**设置 ActiveMQ 消息服务器用于被客户端连接的 url 地址
             * 实际开发中，地址应该在配置文件中可配置，不要写死
             */
            String serviceURL = "tcp://localhost:61616";
            /**BrokerService 表示 ActiveMQ 服务，每一个 BrokerService 表示一个消息服务器实例
             * 如果想启动多个，只需要 start 多个不同端口的 BrokerService 即可*/
            BrokerService brokerService = new BrokerService();
            brokerService.setUseJmx(true);//设置是否应将代理的服务公开到jmx中。默认是 true
            brokerService.addConnector(serviceURL);//为指定地址添加新的传输连接器
            /**启动 ActiveMQ 服务，此时客户端便可以使用提供的地址进行连接，然后发送消息过来，或者从这里消费消息。
             * 注意：这里内嵌启动后，默认是没有提供 8161 端口的 web 管理界面的，照样能做消息中间件使用
             * */
            brokerService.start();
            logger.info(" ActiveMQ Broker Service Start Finish...");
        } catch (Exception e) {
            logger.error("启动 ActiveMQ BrokerService 失败，cause by:" + e.getMessage(), e);
        }
    }
}
